/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo;

import Excepciones.DinamicaDato;
import Excepciones.Sistema;
import com.mysql.jdbc.exceptions.jdbc4.CommunicationsException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import robot_maker.Main;

/**
 *
 * @author CarlosScipione
 */
public class BaseDato {
   private static final String USER_NAME = 
     java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("USER_NAME");
   private static final String PASSWORD = 
     java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("PASSWORD");
   private static final String BASE_DATO = 
     java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("BASE_DATOS");
   private static final String PUERTO = 
     java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("PUERTO");

   private Connection conn;
    private Statement statement;

    private String userName;
    private String password;
    private String url;
     private static boolean conectadoBD;


/**  Devuelve una consulta a la base de datos... */
   public static ResultSet ejecutarSqlSelect (String query) throws DinamicaDato{
       ResultSet result = null;

       if (isConectadoBD()){

       try {
            Connection con = BaseDato.linkData();
            PreparedStatement statement = con.prepareStatement(
                    query.toString());
            result = statement.executeQuery();
        } catch (SQLException ex) {
                        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                         Sistema.loggear(5, "ejecutarSqlSelect",
               "BASE DE DATOS ESTA APAGAGDA REVISE LAS PROPIEDADES DE CONEXION",
                                 BaseDato.class, "SQLException");
                         
       } catch (Exception ex) {
           Sistema.loggear(6, "ejecutarSqlSelect",
                   "ERROR EN SQL", BaseDato.class, "GLOBAL");
        }
       }else{
          Sistema.loggear(5, "ejecutarSqlSelect",
               "BASE DE DATOS ESTA APAGAGDA REVISE LAS PROPIEDADES DE CONEXION",
                                 BaseDato.class, "SQLException");
                         throw new DinamicaDato(1,
               "NO SE PUDO EXTRAR DATOS PARA EL MANEJO",
               "EJECUTARSQLSELECT");
       }
        return result;

   }



/**   Realiza la coneccion a la base de datos... */
   private static Connection linkData (){

       try {
           FabMysql Fcon = new FabMysql();
            Class.forName(Fcon.description());
        } catch (ClassNotFoundException ex) {


             Sistema.loggear(8, "linkData",
                  "ERROR DEL DRIVER", BaseDato.class, "ClassNotFoundException");
        }

            Connection con = null;
        try {
            con = DriverManager.getConnection(PUERTO.toString() +
             BASE_DATO.toString(), USER_NAME.toString(), PASSWORD.toString());
        } catch (SQLException ex) {
                                Logger.getLogger(BaseDato.class.getName()).log(Level.SEVERE, null, ex);

            Sistema.loggear(9, "linkData",
                  "ERROR DE CONEXION AL LINK DE DATA",
                  BaseDato.class, "SQLException");
        }
            return con;
   }


/** Ejecuta un query dado de modificacion de datos sobre base de datos */
   public static void ejecutarSqlInsert (String query) throws DinamicaDato{


       if (isConectadoBD()){

       try {
            Connection con = BaseDato.linkData();
            Statement statements = con.createStatement();
                statements.executeUpdate (query);
            
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
       }else{
                         throw new DinamicaDato(1,
               "NO SE PUDO EXTRAR DATOS PARA EL MANEJO",
               "EJECUTARSQLSELECT");
       }
   }


   /**Contruye un objeto basedato*/
    public BaseDato() throws ClassNotFoundException, SQLException,
            CommunicationsException, DinamicaDato  {

        FabMysql Fcon = new FabMysql();
        Class.forName(Fcon.description());

        conectadoBD = false;

        this.userName =
     java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("USER_NAME");
        this.password =
     java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("PASSWORD");
        this.url = 
           java.util.ResourceBundle.getBundle("Modelo/Clave2").getString("URL");

        conn = DriverManager.getConnection (url, userName, password);

        conectadoBD = true;

        if(!conectadoBD)
                         throw new DinamicaDato(1,
               "NO SE PUDO EXTRAR DATOS PARA EL MANEJO",
               "EJECUTARSQLSELECT");

    }

    /** Para saber si esta conectado a la base de datos*/
    public static boolean isConectadoBD() {
        return conectadoBD;
    }

}
